Pular para o conteúdo principal

Proteção contra abuso

Rate limits

Os limites são aplicados por política, não por um throttle global único. Isso permite tratar confirmação de presença, inscrições, upload de comprovantes, validação de certificados, download público e consultas públicas com janelas diferentes.

Respostas de limite devem preservar informação suficiente para a interface mostrar espera ou tentativa futura, mas não devem revelar detalhes que facilitem enumeração.

As políticas ficam em apps/backend/src/app/rate-limit/rate-limit.policies.ts.

O guard avalia o rate limit por tipo de operação e usa Redis como estado compartilhado. Fora de produção, não há limites, mas o backend ainda registra quando uma política teria bloqueado a requisição.

Resposta para a interface

Erros de rate limit devem carregar retryAfterSeconds para que o frontend consiga mostrar tempo de espera.

O frontend público possui helpers para ler esse formato em GraphQL e REST. Não troque o formato sem atualizar esses helpers e os testes.

Cloudflare Turnstile

O Turnstile é usado como proteção complementar para fluxos públicos de maior risco. Ele não substitui autenticação, autorização, validação de domínio nem rate limit.

Fluxos protegidos

Use proteção contra abuso em fluxos públicos que podem gerar custo, enumeração ou ruído operacional, como:

  • Validação e download de certificados;
  • Confirmação de presença;
  • Inscrição pública;
  • Upload de comprovante;
  • Consultas públicas de alta frequência.

Turnstile não substitui rate limit. Rate limit não substitui validação de domínio. Nenhum dos dois substitui autorização.

Privacidade

Mensagens de falha não devem informar se um certificado, usuário, inscrição, comprovante ou evento existe.

Ao registrar falhas, prefira identificadores técnicos e evite armazenar respostas de formulários, documentos ou comprovantes em logs.